package com.example.tool.util;

import android.graphics.Bitmap;
import android.util.Base64;

import java.io.ByteArrayOutputStream;

/**
 * 描述:图片工具类
 *
 * @author: liangkun
 * @date: 2019/10/12 11:50
 */
public class ImageUtil {
    private static ImageUtil imageUtil;

    /**
     * @param
     * @return
     * @description 单例模式
     * @author liangkun
     * @time 2019/10/12 11:52
     */
    public static ImageUtil getInstance() {
        synchronized (ImageUtil.class) {
            imageUtil = new ImageUtil();
        }
        return imageUtil;
    }

    /**
     * Bitmap转换成Base64字符串
     *
     * @param bitmap
     * @return
     */
    public  String bitmap2StrByBase64(Bitmap bitmap) {
        byte[] bytes = bitmap2byte(bitmap);
        return Base64.encodeToString(bytes, Base64.DEFAULT);

    }
    /**
     * 将bitmp装潢成二进制流数据
     *
     * @param bitmap
     * @return
     */
    public  byte[] bitmap2byte(Bitmap bitmap) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        int options = 100;
        while (baos.toByteArray().length / 1024 > 100) {
            if (options <= 0) {//有的图片过大，可能当options小于或者等于0时，它的大小还是大于目标大小，于是就会发生异常，异常的原因是options超过规定值。所以此处需要判断一下
                break;
            }
            baos.reset();//重置baos即清空baos
            options -= 10;//每次都减少10
            bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%，把压缩后的数据存放到baos中
        }
        return baos.toByteArray();
    }
}
